package com.sisgesbyte.services.sistema;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.RolDetRequest;
import com.sisgesbyte.dao.seguridad.MantenimientoRolDao;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.data.entity.seguridad.RolListaEntity;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.sistema.bean.RolBean;
import com.sisgesbyte.services.sistema.bean.RolListaResponse;

@Stateless
public class MantenimientoRolImpl implements MantenimientoRol {

	@EJB
	private MantenimientoRolDao mantenimientoRolDao;
	
	@Inject
	private Validaciones validaciones;
	
	@Override
	public RolListaResponse mostrarListaRol(String idTransaccion) {
		
		List<RolListaEntity> listaRol = null;
		RolListaResponse response = new RolListaResponse();
		try{
			response.setIdTransaccion(idTransaccion);
			try{
				listaRol = mantenimientoRolDao.listaRol();
				
			}catch(Exception e){
				System.out.println("Ocurrio un error al traer los datos" + e);
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ROL_COD_IDT18);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ROL_MSJ_IDT18);
			}
			
			if(listaRol.size() > 0){
				List<RolBean> lista = new ArrayList<RolBean>();
				
				for(RolListaEntity row : listaRol){
					RolBean rol = new RolBean();
					rol.setId(row.getId());
					rol.setNombre(validaciones.validarCamposString(row.getNombre()));
					rol.setActive(row.getActive());
					lista.add(rol);
				}
				response.setListaRol(lista);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
				
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ROL_COD_IDF17);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ROL_MSJ_IDF17);
			}
			
		}catch(Exception e){
			System.out.println("Ocurrio un error en el Proceso " + e);
			response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ROL_COD_IDT18);
			response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ROL_MSJ_IDT18);
		}
	
		return response;
	}

	@Override
	public GenericResponse nuevoRol(String codTransaccion, RolBean rol) {
		
		GenericResponse response = new GenericResponse();
		GenericEntity nuevoRol = null;
		
		try{
			response.setIdTransaccion(codTransaccion);
			RolDetRequest req = new RolDetRequest();
			req.setNombreRol(validaciones.validarCamposString(rol.getNombre()));
			req.setActive(rol.getActive());
			
			try{
				nuevoRol = mantenimientoRolDao.guardarRol(req);
			}catch(Exception e){
				System.out.println("Ocurrio un Error al guardar en la BD");
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ROL_COD_IDT19);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ROL_MSJ_IDT19);
			}
			
			if(nuevoRol.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ROL_COD_IDF18);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ROL_MSJ_IDF18);
			}
			
		}catch(Exception e){
			response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ROL_COD_IDT19);
			response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ROL_MSJ_IDT19);
		}
		return response;
	}

	@Override
	public GenericResponse editRol(String codTransaccion, RolBean rol) {
		
		GenericResponse response = new GenericResponse();
		GenericEntity rolEdit = null;
		try{
			response.setIdTransaccion(codTransaccion);
			
			RolDetRequest editRol = new RolDetRequest();
			editRol.setCodRol(rol.getId());
			editRol.setNombreRol(validaciones.validarCamposString(rol.getNombre()));
			editRol.setActive(rol.getActive());
			
			try{
				rolEdit = mantenimientoRolDao.actualizarRol(editRol);
			}catch(Exception e){
				System.out.println("Ocurrio un Error al intener editar en BD");
				response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_ROL_COD_IDT21);
				response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_ROL_MSJ_IDT21);
			}
			
			if(rolEdit.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_ROL_COD_IDF19);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_ROL_MSJ_IDF19);
			}
			
		
		}catch(Exception e){
			response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_ROL_COD_IDT21);
			response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_ROL_MSJ_IDT21);
		}
		return response;
	}

	@Override
	public GenericResponse deleteRol(String codTransaccion, int codModulo) {
		
		GenericResponse response = new GenericResponse();
		GenericEntity rolDelete = null;
		
		try{
			response.setIdTransaccion(codTransaccion);
			
			rolDelete = mantenimientoRolDao.eliminarRol(codModulo);
			
			if(rolDelete.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_ROL_COD_IDF20);
				response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_ROL_MSJ_IDF20);
			}
		}catch(Exception e){
			System.out.println("Ocurrio un error en el proceso deleteRol" + e);
			response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_ROL_COD_IDT21);
			response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_ROL_MSJ_IDT21);
		}
		return response;
	}

}
